Ana içeriğe geç

İstisnalar

Java'da istisna (exception), programın normal yürütmesi sırasında ortaya çıkan hataları temsil eden nesnelerdir. Bir istisna, bir hata durumunu tanımlamak ve programın bu hatayı nasıl ele alacağını belirlemek için kullanılır. İstisnalar, programda bir hata durumu meydana geldiğinde, normal yürütme akışından ayrılarak istisna durumunu ele alan özel bir kod bloğuna yönlendirilirler.

Java'da birçok farklı türde istisna vardır. Bunlar arasında:

  1. Kontrol edilen istisnalar: Kodun bir parçası tarafından atılan ve kodun çağrıldığı yerde ele alınması gereken istisnalardır. Örneğin, bir dosya işlemi sırasında dosyanın bulunamaması gibi durumlar kontrol edilen istisna olarak ele alınır.

  2. Kontrol edilmeyen istisnalar: Programın çalışması sırasında ortaya çıkan ve önceden tahmin edilemeyen istisnalardır. Örneğin, bellek yetersizliği, sıfıra bölme hatası gibi durumlar kontrol edilmeyen istisna olarak ele alınır.

  3. Error: Ciddi programlama hatalarının ortaya çıkmasından kaynaklanan istisnalardır. Örneğin, StackOverflowError ve OutOfMemoryError gibi hatalar kontrol edilemez ve programın normal yürütmesi sonlandırılır.

bilgi

Java'da istisna yönetimi için try-catch blokları kullanılır. try bloğu içindeki kod, istisna durumlarının meydana gelebileceği kod bloğudur.

Eğer bir istisna oluşursa, catch bloğu, bu istisna durumunu ele alır ve istisna durumunun tipine göre uygun şekilde işlem yapar.

Aşağıdaki örnek, bir dosyanın okunması sırasında meydana gelebilecek istisna durumlarını ele almak için bir try-catch bloğu kullanır:

try {
File file = new File("file.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
} catch (FileNotFoundException e) {
System.out.println("Dosya bulunamadı: " + e.getMessage());
}

Yukarıdaki örnekte, File sınıfı, bir dosyanın okunması için kullanılır. Ancak, dosya bulunamadığında bir FileNotFoundException istisna durumu oluşabilir. Bu nedenle, try bloğu içindeki kod, bir catch bloğu ile çevrelenir ve bu blok, dosya bulunamadığında istisna durumunu ele alır. İstisna durumu, getMessage() metodu ile alınır ve kullanıcıya bir hata mesajı olarak gösterilir.

İstisna Türleri

Bir programcı olarak, aşağıdaki istisna türlerinin farkında olmalısınız:

  1. ArithmeticException: Matematiksel bir işlemin sonucu sıfıra bölündüğünde veya geçersiz bir aritmetik işlem yapıldığında oluşur.

  2. ArrayIndexOutOfBoundsException: Bir diziye geçersiz bir dizinle erişildiğinde meydana gelir.

  3. ClassNotFoundException: Bir sınıfın yürütme zamanında yüklenememesi durumunda oluşur.

  4. FileNotFoundException: Bir dosya bulunamadığında oluşur.

  5. IOException: Giriş/çıkış işlemleri sırasında oluşabilecek genel bir istisna türüdür.

  6. NullPointerException: Bir nesne referansının null olduğu durumlarda ortaya çıkar.

  7. NumberFormatException: Bir dizeyi sayıya dönüştürme işlemi sırasında bir hata oluştuğunda oluşur.

  8. StringIndexOutOfBoundsException: Bir dizenin geçersiz bir karakter dizinleme işlemi yapılması durumunda oluşur.

Bu istisna türleri, programın normal yürütmesi sırasında oluşabilecek birçok farklı hata durumunu temsil eder. Bu istisnalar, kodunuzda hata durumlarını ele almak için kullanılabilir ve try-catch blokları aracılığıyla ele alınabilir. Ayrıca, kendi özel istisna türlerinizi de tanımlayabilir ve kullanabilirsiniz.

ArithmeticException

Java'da ArithmeticException, matematiksel bir işlemin geçersiz veya imkansız olduğu durumlarda oluşan bir istisna türüdür. Bu hatanın en yaygın nedeni, bir sayının sıfıra bölünmeye çalışılmasıdır. Örneğin, aşağıdaki kodda bir ArithmeticException hatası oluşacaktır:

int x = 5;
int y = 0;
int z = x / y; // ArithmeticException: / by zero

Bu örnekte, y sıfıra eşit olduğu için z'nin değerini hesaplamak için x sıfıra bölünmeye çalışılır. Bu, bir ArithmeticException hatasına neden olur.

ipucu

Bu hatayı önlemek için, öncelikle bir sayının sıfıra bölünmesini engellemelisiniz. Bu, if veya try-catch blokları kullanarak yapılabilir.

int x = 5;
int y = 0;

if (y != 0) {
int z = x / y;
System.out.println(z);
} else {
System.out.println("Sıfıra bölünemez.");
}

ArrayIndexOutOfBoundsException

ArrayIndexOutOfBoundsException hatası, bir dizinin sınırları dışındaki bir indis numarasına erişilmeye çalışıldığında oluşan bir istisna türüdür. Bunun nedeni, geçersiz bir dizin numarasının verilmesidir. Örneğin, aşağıdaki kodda bir ArrayIndexOutOfBoundsException hatası oluşacaktır:

int[] numbers = {1, 2, 3};
int index = 3;
int value = numbers[index]; // ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
tehlike

Bu hatayı önlemek için, bir dizide geçerli bir indis numarası kullanmalısınız.

int[] numbers = {1, 2, 3};
int index = 3;

if (index >= 0 && index < numbers.length) {
int value = numbers[index];
System.out.println(value);
} else {
System.out.println("Dizin sınırlarının dışına çıkıldı.");
}

ClassNotFoundException

ClassNotFoundException hatası, bir sınıfın yüklenemediğinde oluşan bir istisna türüdür. Bu hatanın nedeni, sınıfın isminin yanlış yazılması veya yüklenemeyecek bir yerde olmasıdır.

Örneğin, aşağıdaki kodda bir ClassNotFoundException hatası oluşacaktır:

try {
Class.forName("com.example.MyClass");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
not

Bu hatayı önlemek için, sınıfın doğru bir şekilde derlendiğinden ve yüklenemeyecek bir yerde olmadığından emin olun.

FileNotFoundException

FileNotFoundException hatası, bir dosyanın bulunamaması veya açılmaması durumunda oluşan bir istisna türüdür. Bunun nedeni, bir dosyanın belirtilen yolda veya dizinde mevcut olmaması veya kullanıcının gerekli izinlere sahip olmamasıdır.

try {
File file = new File("my_file.txt");
FileReader reader = new FileReader(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
tehlike

Bu hatayı önlemek için, belirtilen dosyanın doğru bir şekilde adlandırıldığından ve yolunun doğru olduğundan emin olun.

IOException

IOException, girdi/çıktı işlemleri sırasında oluşan bir istisna türüdür. Bu istisnalar, bir dosya okunurken veya yazılırken, ağ bağlantısı kurulurken veya veritabanına erişilirken oluşabilir.

try {
FileWriter writer = new FileWriter("my_file.txt");
writer.write("Hello, world!");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
ipucu

Bu hatayı önlemek için, girdi/çıktı işlemlerini yapmadan önce gerekli izinlere sahip olduğunuzdan emin olun.

NullPointerException

NullPointerException, null bir referansa işaret eden bir nesnenin veya dizinin kullanılmaya çalışılması durumunda oluşan bir istisna türüdür.

String str = null;
int length = str.length();
tehlike

Bu hatayı önlemek için, null bir nesneye veya dizine erişim yapmadan önce, null olmayan bir nesne veya dizinin varlığından emin olun.

NumberFormatException

NumberFormatException, bir dizgeyi sayıya dönüştürmeye çalışırken, geçersiz bir sayı biçimi nedeniyle oluşan bir istisna türüdür.

String str = "abc";
int num = Integer.parseInt(str);
not

Bu hatayı önlemek için, bir dizgeyi sayıya dönüştürmeden önce, dizenin sayısal bir değer içerip içermediğini kontrol etmelisiniz.

StringIndexOutOfBoundsException

Java'da StringIndexOutOfBoundsException, bir dizge üzerinde bir karakter veya alt diziye erişmeye çalışırken, geçersiz bir dizin veya aralık nedeniyle oluşan bir istisna türüdür.

String str = "example";
char c = str.charAt(10);
ipucu

Bu hatayı önlemek için, bir dizgede belirli bir karaktere veya alt diziye erişmeden önce, dizinin uzunluğunu kontrol ediniz.